﻿Imports DTO
Imports System.Data.SqlClient

Public Class VendaDAL

#Region "Métodos"

    ''' <summary>
    ''' Método responsável incluir uma venda na base de dados
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub Incluir(venda As VendaDTO)
        Dim strSql As String
        Using conn As New SqlConnection(My.Settings.Conexao)

            'Cria a string de execução da procedure
            strSql = "EXEC PR_INSERIR_VENDA " & _
                     " @NomeCliente, @NumeroCartao, " & _
                     " @DataValidade, @CodigoSeguranca, @Bandeira  "


            Using cmd As New SqlCommand(strSql, conn)
                Try
                    'Cria os parâmetros de execução
                    cmd.Parameters.Add("@NomeCliente", SqlDbType.VarChar, 200).Value = venda.pCliente.pUsuario

                    cmd.Parameters.Add("@NumeroCartao", SqlDbType.VarChar, 20).Value = venda.pNumeroCartao

                    cmd.Parameters.Add("@DataValidade", SqlDbType.DateTime).Value = venda.pDataValidade
                    cmd.Parameters.Add("@CodigoSeguranca", SqlDbType.Char, 4).Value = venda.pCodigoSeguranca
                    cmd.Parameters.Add("@Bandeira", SqlDbType.VarChar, 20).Value = venda.pBandeira

                    conn.Open() 'Abrir a conexao
                    cmd.ExecuteNonQuery() 'Executa o SQL

                    IncluirProdutos(venda.pProduto)

                Catch ex As SqlException
                    'Erro nº 2627 do SQLException indica chave primaria duplicada
                    If ex.Number = 2627 Then
                        Throw New Exception("Já existe um cliente com este CPF cadastrado!")
                    Else
                        Throw ex
                    End If
                Catch ex As Exception
                    Throw ex
                End Try
            End Using
        End Using
    End Sub

    Public Sub IncluirProdutos(produto As List(Of ProdutoDTO))
        Dim strSql As String
        Dim x As Integer = 0

        While x < produto.Count
            Using conn As New SqlConnection(My.Settings.Conexao)

                'Cria a string de execução da procedure
                strSql = "EXEC PR_INSERIR_VENDAPRODUTOS " & _
                         " @CodigoProduto, @NomeProduto, @TipoProduto, " & _
                         "  @Quantidade, @ValorUnitario, @ValorTotal"

                Using cmd As New SqlCommand(strSql, conn)
                    Try
                        cmd.Parameters.Add("@CodigoProduto", SqlDbType.Int).Value = produto(x).pCodigo
                        cmd.Parameters.Add("@NomeProduto", SqlDbType.VarChar, 50).Value = produto(x).pNome
                        cmd.Parameters.Add("@Quantidade", SqlDbType.Decimal).Value = produto(x).pQuantidade
                        cmd.Parameters.Add("@TipoProduto", SqlDbType.VarChar, 20).Value = produto(x).pTipo
                        cmd.Parameters.Add("@ValorUnitario", SqlDbType.Decimal).Value = produto(x).pValorVenda
                        cmd.Parameters.Add("@ValorTotal", SqlDbType.Decimal).Value = produto(x).pValorTotal

                        'Cria os parâmetros de execução


                        conn.Open() 'Abrir a conexao
                        cmd.ExecuteNonQuery() 'Executa o SQL

                    Catch ex As SqlException
                        'Erro nº 2627 do SQLException indica chave primaria duplicada
                        If ex.Number = 2627 Then
                            Throw New Exception("Já existe um produto com este código cadastrado!")
                        Else
                            Throw ex
                        End If
                    Catch ex As Exception
                        Throw ex
                    End Try
                End Using

            End Using
            x = x + 1
        End While

    End Sub

#End Region

End Class
